#pragma once

class IWzImageProperty :
	public IWzObject
{
public:

	IWzImageProperty() {
		this->ObjectType = WzObjectType::WzObjectType_Directory;
	}

	virtual ~IWzImageProperty() {

	}

	std::list<IWzImageProperty*> WzProperties;
	void* WzValue; // Extremely! unsafe. BE CAREFUL. You don't want to feed it shell code then call ((func*)WzValue)();
	virtual const IWzImageProperty& operator[](char* name) = 0;

	virtual IWzImageProperty* GetFromPath(char* path) = 0;
	virtual WzPropertyType* PropertyType() = 0;
	WzObjectType ObjectType; // MUST SET IN INITIALIZER.

	internal WzImage* ParentImage;
	virtual void WriteValue(WzBinaryWriter writer) =0;
	virtual IWzImageProperty* DeepClone() = 0;
	virtual void SetValue(void* value) = 0;


	virtual void Remove() {
		((IWzPropertyContainer*)Parent)->RemoveProperty(this);
	}


};